Common Lisp provides a number of iteration constructs. The <#2238#>loop<#2238#> construct provides a trivial iteration facility; it is little more than a <#2239#>progn<#2239#> with a branch from the bottom back to the top. The <#2240#>do<#2240#> and <#2241#>do*<#2241#> constructs provide a general iteration facility for controlling the variation of several variables on each cycle. For specialized iterations over the elements of a list or <#2242#>n<#2242#> consecutive integers, <#2243#>dolist<#2243#> and <#2244#>dotimes<#2244#> are provided. The <#2245#>tagbody<#2245#> construct is the most general, permitting arbitrary <#2246#>go<#2246#> statements within it. (The traditional <#2247#>prog<#2247#> construct is a synthesis of <#2248#>tagbody<#2248#>, <#2249#>block<#2249#>, and <#2250#>let<#2250#>.) Most of the iteration constructs permit statically defined non-local exits (see <#2251#>return-from<#2251#> and <#2252#>return<#2252#>).